package com.itfenghuang.day01;

//抽象类
public class A06_Abstract {

    public static void main(String[] args) {
        /**
         * 1.概念
         * 属性:  name  age  color  行为:  eat  抓老鼠catchMouse
         * 属性:  name  age  color  行为:  eat  lookhome
         * 使用继承提取出来一个Animal类,共同的特性抽取出来
         *2.抽象方法
         *      被abstract修饰的方法
         *.抽象类
         *      包含抽象方法的类,即被abstract修饰的类
         *
         * 3.抽象的特点
         *      如果一个类中有抽象方法,那么这个类一定是抽象类
         *      抽象类中可以有普通的方法,但是包含抽象方法的类一定是抽象类
         *      抽象类的子类,如果子类是普通类,那么一定要从写父类的抽象方法,除非子类也是抽象类
         *      抽象类不能被实例化(即不能创建对象)
         *      抽象方法必须是Public的
         *
         * 4.抽象类成员的特点:  属性  方法  构造方法
         *      成员变量:   可以有变量,也可以有常量
         *      成员方法:   可以有普通方法,也可以有抽象方法
         *      构造方法:   有构造方法
         *      final  和 abstract  不能共存
         *      static 和 abstract  不能共存
         */

        Cat cat = new Cat();
        cat.eat();
        Dog dog = new Dog();
        dog.eat();


    }
}
//抽象类
abstract class Aniaml{
    public String name;
    public int age;

    public String color;

    public final String gender="公";

    public Aniaml(){
    }
    public Aniaml(String name, int age, String color) {
        this.name = name;
        this.age = age;
        this.color = color;
    }

    public abstract void  eat();
    public void show(){
        System.out.println("打印");
    }
}
 class Cat extends Aniaml{
     @Override
     public void eat() {
         System.out.println("猫吃鱼");
     }

 }
 class Dog extends Aniaml{
     @Override
     public void eat() {
         System.out.println("狗吃肉");
     }
 }
 abstract class Pig1 extends Aniaml{
    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}

